package org.example.servicepay.service;

import org.example.servicepay.vo.StudentFeeListResponse;
import org.example.servicepay.vo.StudentBatchPayRequest;
import org.example.servicepay.vo.PaymentResponse;
import org.example.model.manage.bean.Result;
import org.example.model.manage.bean.vo.PendingPayVO;

import jakarta.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 学生缴费服务接口（学生功能）
 */
public interface StudentPayService {

    /**
     * 获取学生的缴费清单（待缴费 + 已缴费）
     * @param studentId 学生ID
     * @return 学生缴费清单
     */
    Result<StudentFeeListResponse> getStudentFeeList(String studentId);

    /**
     * 学生批量选择缴费项目进行支付
     * @param studentId 学生ID
     * @param request 批量缴费请求参数
     * @return 支付响应结果
     */
    Result<PaymentResponse> batchPayFees(String studentId, StudentBatchPayRequest request);

    /**
     * 查询支付结果
     * @param studentId 学生ID
     * @param outTradeNo 商户订单号
     * @return 支付结果
     */
    Result<PaymentResponse> queryPaymentResult(String studentId, String outTradeNo);

    /**
     * 关闭支付订单
     * @param studentId 学生ID
     * @param outTradeNo 商户订单号
     * @return 操作结果
     */
    Result<String> closePaymentOrder(String studentId, String outTradeNo);

    /**
     * 处理支付回调通知
     * @param request HTTP请求
     * @return 处理结果
     */
    boolean handlePaymentNotify(HttpServletRequest request);

    /**
     * 申请退款
     * @param studentId 学生ID
     * @param outTradeNo 商户订单号
     * @param refundReason 退款原因
     * @return 退款结果
     */
    Result<PaymentResponse> applyRefund(String studentId, String outTradeNo, String refundReason);

    /**
     * 获取学生的支付历史
     * @param studentId 学生ID
     * @return 支付历史列表
     */
    Result<Object> getPaymentHistory(String studentId);

    /**
     * 查询学生的待支付项目
     * @param studentId 学生ID
     * @return 待支付项目列表
     */
    Result<List<PendingPayVO>> getPendingPayments(String studentId);
}